#include "ad_key.h"
#include <stdio.h>
#include <stdlib.h>

static esp_adc_cal_characteristics_t *adc1_chars;  // ADC1 校准数据
static esp_adc_cal_characteristics_t *adc2_chars;  // ADC2 校准数据

// 初始化 ADC1（按键检测）
void bsp_adkey_init(void) {
    adc1_config_width(ADC1_WIDTH);
    adc1_chars = calloc(1, sizeof(esp_adc_cal_characteristics_t));
    esp_adc_cal_characterize(ADC_UNIT_1, ADC1_ATTEN, ADC1_WIDTH, DEFAULT_VREF, adc1_chars);
    adc1_config_channel_atten(ADC1_CHANNEL, ADC1_ATTEN);  // 必须配置通道衰减！
    printf("ADC1 (Key) init done\n");
}

// 初始化 ADC2（电压检测）
void bsp_adfs_init(void) {
    adc2_config_channel_atten(ADC2_CHANNEL, ADC2_ATTEN);  // 必须先配置通道衰减！
    adc2_chars = calloc(1, sizeof(esp_adc_cal_characteristics_t));
    esp_adc_cal_characterize(ADC_UNIT_2, ADC2_ATTEN, ADC2_WIDTH, DEFAULT_VREF, adc2_chars);
    printf("ADC2 (Voltage) init done\n");
}

// 读取 ADC1 按键值
int bsp_adkey_read(void) {
    int raw = adc1_get_raw(ADC1_CHANNEL);
    return (raw >= 500 && raw < 700)   * 1 +
           (raw >= 1100 && raw < 1250) * 2 +
           (raw >= 1900 && raw < 2100) * 3 +
           (raw >= 2900 && raw < 3100) * 4 +
           (raw >= 3700 && raw < 3850) * 5;
}

// 读取 ADC2 电压值（返回原始 ADC 值）
int bsp_adfs_read(void) {
    int raw;
    adc2_get_raw(ADC2_CHANNEL, ADC2_WIDTH, &raw);  // 必须用 adc2_get_raw
    return raw;
}